package es.antonio.duarte.abrahamAdmin.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import java.io.Serializable;
import java.util.Date;

import org.hibernate.annotations.GenericGenerator;
/**
 * Clase de modelo anotada con Hibernate para hacer este pojo en una entidad.
 * @author Antonio Duarte
 *
 */
@Entity
@GenericGenerator(name = "nativo", strategy = "native")
@Table(name = "COSAS", schema = "PUBLIC")
public class Cosas implements Serializable {
   /**
    * El identifiicador de esta clase.
    */
   private Long id;
   /**
    * El titulo del registro del diario que vamos a guardar.
    */
   private String titulo;
   /**
    * El cuerpo del registro del diario que vamos a guardar.
    */
   private String cuerpo;
   /**
    * La fecha del registro del diario que vamos a guardar.
    */   
   private Date fecha = new Date();
   
   
   /**
    * Constructor básico.
    */
   public Cosas() {
      // En blanco intencionalmente
   }
   /**
    * Constructor por clave.
    * @param id La clave que identifica este objeto.
    */
   public Cosas(final Long id) {
      this.id = id;
   }
   /**
    * Constructor por identificador, titulo, cuerpo y fecha.
    * @param id La clave del objeto.
    * @param titulo El titulo del diario.
    * @param cuerpo El cuerpo del diario.
    * @param fecha La fecha del diario.
    */
   public Cosas(final Long id, final String titulo, final String cuerpo, Date fecha) {
      this.id = id;
      this.titulo = titulo;
      this.cuerpo = cuerpo;
      this.fecha = fecha;
   }
   
   /**
    * Se recupera al id del objeto.
    * @return el id del objeto.
    */
   @Id
   @GeneratedValue(generator = "nativo")
   @Column(name = "ID", unique = true, nullable = false)
   public Long getId() {
      return this.id;
   }
   /**
    * Para recuperar el id del objeto.
    * @param id El identificador del objeto.
    */
   public void setId(Long id) {
      this.id = id;
   }

   /**
    * Se recupera un titulo del diario.
    * @return El titulo del diario.
    */
   @Column(name = "TITULO")
   public String getTitulo() {
      return this.titulo;
   }
   /**
    * Se modifica el titulo de este diario.
    * @param titulo El texto que contiene el titulo.
    */
   public void setTitulo(final String titulo) {
      this.titulo = titulo;
   }
   /**
    * Se recupera un cuerpo del diario.
    * @return El cuerpo del diario.
    */
   @Column(name = "CUERPO")
   public String getCuerpo() {
	   return this.cuerpo;
   }
   /**
    * Se modifica el cuerpo de este diario.
    * @param titulo El texto que contiene el cuerpo.
    */
   public void setCuerpo(final String cuerpo) {
	   this.cuerpo = cuerpo;
   }
   /**
    * Recupera la fecha de este diario.
    * @return La fecha del diario.
    */
   @Temporal(TemporalType.DATE)
   @Column(name = "FECHA")
   public Date getFecha() {
      return this.fecha;
   }
   /**
    * Se establece la fecha de este diario.
    * @param fecha La fecha del diario.
    */
   public void setFecha(final Date fecha) {
      this.fecha = fecha;
   }
   
   /**
    * Una cadena con el valor actual de todos los campos del objeto.
    * @return El diario en forma de cadena de este objeto.
    */
   @Override
   public String toString() {
      return "id: " + getId() + " titulo: " + getTitulo() + " cuerpo: " + getCuerpo() + " fecha: " + getFecha();
   }
}
